package com.uoko.common.collection;

import java.util.Collection;

/**
 * <p>
 *
 * </p>
 *
 * @author chenyingchun
 * Email qiaohai@uoko.com
 * created by 2018/6/6 0006
 */
public interface IMultiCollection<K, V>  {
	
	/**
	 * putIndex:更新一个索引关键字的一个索引内容，例如，某一个产品的某个站点。站点三字码作为key,产品编号作为value TODO(这里描述这个方法适用条件 – 可选) TODO(这里描述这个方法的执行流程 – 可选)
	 * TODO(这里描述这个方法的使用方法 – 可选) TODO(这里描述这个方法的注意事项 – 可选)
	 *
	 * @param @param key 关键字
	 * @param @param value 索引内容
	 * @return void DOM对象
	 * @throws @since CodingExample Ver 1.1
	 */
	void put(K key, V value);

	/**
	 * 是否為空
	 * 
	 * @return
	 */
	boolean isEmpty();

	/**
	 * @param key
	 * @return
	 */
	boolean containsKey(K key);

	/**
	 * @param key
	 * @param value
	 * @return
	 */
	boolean containsEntry(K key, V value);
	
	
	

	/**
	 * @param key
	 * @param values
	 * @return
	 */
	Collection<V> replaceValues(K key, Iterable<? extends V> values);

	/**
	 * 更新一个索引关键字的多个索引内容，例如，某个站点。站点三字码作为key,多个产品编号list作为values putIndexList:(这里用一句话描述这个方法的作用) TODO(这里描述这个方法适用条件 – 可选)
	 * TODO(这里描述这个方法的执行流程 – 可选) TODO(这里描述这个方法的使用方法 – 可选) TODO(这里描述这个方法的注意事项 – 可选)
	 *
	 * @param @param key
	 * @param @param values 设定文件
	 * @return void DOM对象
	 * @throws @since CodingExample Ver 1.1
	 */
	void putAll(K key, Collection<V> values);

	/**
	 * 移除一个关键字索引的一条索引内容，例如，某个站点。站点三字码作为key,产品编号作为value removeIndex:(这里用一句话描述这个方法的作用) TODO(这里描述这个方法适用条件 – 可选) TODO(这里描述这个方法的执行流程
	 * – 可选) TODO(这里描述这个方法的使用方法 – 可选) TODO(这里描述这个方法的注意事项 – 可选)
	 *
	 * @param @param key
	 * @param @param value 设定文件
	 * @return void DOM对象
	 * @throws @since CodingExample Ver 1.1
	 */
	void remove(K key, V value);

	/**
	 * 移除一个索引的所有的索引内容， 例如：某个站点。站点三字码作为key，移除这个站点所有产品编号内容 removeAllIndex:(这里用一句话描述这个方法的作用) TODO(这里描述这个方法适用条件 – 可选)
	 * TODO(这里描述这个方法的执行流程 – 可选) TODO(这里描述这个方法的使用方法 – 可选) TODO(这里描述这个方法的注意事项 – 可选)
	 *
	 * @param @param key 设定文件
	 * @return void DOM对象
	 * @throws @since CodingExample Ver 1.1
	 */
	void removeAll(K key);



	/**
	 * 返回所有key集合的set
	 * 
	 * @return
	 */
	Collection<K> keySet();

	/**
	 * 对key对应的元素计数
	 * 
	 * @param key
	 * @return
	 */
	Integer count(K key);

	/**
	 * 清空。 clear:(这里用一句话描述这个方法的作用) TODO(这里描述这个方法适用条件 – 可选) TODO(这里描述这个方法的执行流程 – 可选) TODO(这里描述这个方法的使用方法 – 可选) TODO(这里描述这个方法的注意事项
	 * – 可选)
	 *
	 * @param
	 * @return void DOM对象
	 * @throws @since CodingExample Ver 1.1
	 */
	void clear();
 

}
